package com.tabnet.servlet.client;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.tabnet.beans.personnes.Client;
import com.tabnet.dao.DAOClient;
import com.tabnet.dao.DAOException;
import com.tabnet.dao.DAOFactory;
import com.tabnet.form.client.ConnexionClientForm;

/**
 * Servlet qui s'occupe de connecter le client à sa partie administration
 */
public class ConnexionClient extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
	
    public static final String ATT_USER         = "client";
    public static final String ATT_FORM         = "form";
    public static final String SESSION_USER 	= "sessionClient";
    public static final String VUE              = "/WEB-INF/connexionClient.jsp";
    public static final String VUE_SUCCES 	    = "/adminClient/accueil.jsp";

    private DAOClient _ClientDao;
    
    public void init() throws ServletException {
        /* Récupération d'une instance de notre DAO Utilisateur */
    	try {
			this._ClientDao = DAOFactory.getInstance().getClientDAO();
		}
    	catch (DAOException e) {
			e.printStackTrace();
		}
    }
    
    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
        /* Affichage de la page de connexion */
        this.getServletContext().getRequestDispatcher( VUE ).forward( request, response );
    }

    public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
        /* Préparation de l'objet formulaire */
    	ConnexionClientForm form = new ConnexionClientForm(this._ClientDao);

        /* Traitement de la requête et récupération du bean en résultant */
        Client client = form.connecterClient( request );

        /* Récupération de la session depuis la requête */
        HttpSession session = request.getSession();
        
        /* Stockage du formulaire et du bean dans l'objet request */
        request.setAttribute( ATT_FORM, form );
        request.setAttribute( ATT_USER, client );
        
        /**
         * Si aucune erreur de validation n'a eu lieu, alors ajout du bean
         * client à la session, sinon suppression du bean de la session.
         */
        if ( form.getErreurs().isEmpty() ) {
            session.setAttribute( SESSION_USER, client );
            response.sendRedirect( request.getContextPath() + VUE_SUCCES );
        }
        else {
            session.setAttribute( SESSION_USER, null );
            this.getServletContext().getRequestDispatcher( VUE ).forward( request, response );
        }
    }
}
